import createApp from "./app";

// 此方法时服务端运行的
export default (content)=> { //content.url 这里包含当前访问服务端的路径
  return new Promise((resolve,reject)=> {
    const {app, router, store} = createApp();
    router.push(content.url);// 默认跳转到路径里  有异步组件
    router.onReady(async () => {
      const matchComponents = router.getMatchedComponents();//获取匹配到的组件
      if(matchComponents.length>0) {
        await Promise.all(
          matchComponents.reduce(
            // 需要等待所有的 asyncData方法执行完毕后 才响应
            (total, component, index) => {
              // 返回的是promise
              return component?.asyncData ? total.concat(component.asyncData({store, params: content.params})): total;
            },[]
          )
        )
        // vue-server-renderer 帮你实现的
        content.state = store.state;//将状态放到上下文中  自动将结果放到window上
        resolve(app) //每次都是一个新的  只是产生一个实例 服务端根据实例创建字符串
      } else {
        reject({code: 404}); //没有匹配到路由
      }
      
    }, reject)
    // return app 
  })
}
